<?php

require_once ('DataBase.php');

//Utiliza el patron Singleton
class MateriasBDFacade {

    private static $instance;

    private function __construct() {
        
    }

    public static function getInstance() { //metodo Singleton
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }
        return self::$instance;
    }

    public function existePerfil($user) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM pinf.perfil WHERE usrname = '$user'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: PerfilBDFacade.existePerfil(): " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function existePeriodo($mesIni, $mesFin, $anio) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Periodo WHERE mesIni = '$mesIni'" .
                "AND mesFin = '$mesFin' AND anio = $anio";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.existePeriodo(): " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function existeMateria($codigo) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Materia WHERE codigo = '$codigo'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.existeMateria(): " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function obtenerMateriasPensum() {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Materia";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.obtenerMateriasPensum: " . mysql_error());
        }
        $array = array();
        while ($row = mysql_fetch_row($queryResult)) {
            $array[] = $row;
        }
        return $array;
    }

    //ACTUALIZAR A NUEVA DB!
    public function obtenerPeriodosValidos($user, $materia) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT p.mesInicial, p.mesFinal, p.ano
            FROM Periodo p LEFT JOIN CursaProfesorConPerfil c
            ON p.mesInicial = c.Periodo_MesInicial
            AND p.mesFinal = c.Periodo_mesFinal
            AND p.ano = c.Periodo_ano
            AND c.Perfil_user_estudiante = '$user'
            AND c.Materia_codigo = '$materia'
            WHERE c.Perfil_user_estudiante IS NULL
            AND (p.mesInicial, p.mesFinal, p.ano) IN
            (SELECT p.mesInicial, p.mesFinal, p.ano
            FROM Periodo p LEFT JOIN CursaProfesorSinPerfil c
            ON p.mesInicial = c.Periodo_MesInicial
            AND p.mesFinal = c.Periodo_mesFinal
            AND p.ano = c.Periodo_ano
            AND c.Perfil_user = '$user'
            AND c.Materia_codigo = '$materia'
            WHERE c.Perfil_user IS NULL)";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.obtenerPeriodosValidos: " . mysql_error());
        }
        $array = array();
        while ($row = mysql_fetch_row($queryResult)) {
            $array[] = $row;
        }
        return $array;
    }

    public function existeDepartamento($codigo) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Departamento WHERE codigo = '$codigo'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.existeDepartamento(): " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function existeCurso($estudiante, $materia, $mesIni, $mesFin, $anio) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Curso " .
                "WHERE estudiante = '$estudiante' AND materia = '$materia' AND " .
                "mesIni = '$mesIni' AND mesFin = '$mesFin' " .
                "AND anio = $anio";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.existeCurso: " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function obtenerMaterias($username) {
        DataBase::getInstance(); //Conexion a BD establecida.
        //$sqlQuery = "SELECT user, nombre, apellido, codigo, nombre, numCreditos, nombre AS nombreDept, direccion, NombreProfesor, ApellidoProfesor, calificacion FROM Perfil AS p, Materia AS m, CursaProfesorSinPerfil AS c, Departamento AS d, Periodo AS pe WHERE c.Perfil_user = '$username' AND c.Perfil_user = p.user AND c.Materia_codigo = m.Codigo AND m.departamento = d.codigo AND c.Periodo_mesInicial = pe.mesInicial AND c.Periodo_mesFinal = pe.mesFinal AND c.Periodo_ano = pe.ano";
        $sqlQuery = "SELECT * FROM Pinf.Curso WHERE estudiante = '$username'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.obtenerMaterias: " . mysql_error());
        }
        $array = array();
        while ($row = mysql_fetch_row($queryResult)) {
            $array[] = $row;
        }
        return $array;
    }

    public function registrarCurso($user, $materia, $mesIni, $mesFin, $anio, $calificacion, $profPerfil, $nombreP, $apellidoP) {
        DataBase::getInstance();
        $sqlQuery = "INSERT INTO pinf.curso
                    (estudiante,
                    materia,
                    mesIni,
                    mesFin,
                    anio,
                    calificacion,
                    profesorId,
                    nombreProfesor,
                    apellidoProfesor)
                    VALUES
                    (
                    '$user',
                    '$materia',
                    '$mesIni',
                    '$mesFin',
                    '$anio',
                    $calificacion,
                    '$profPerfil',
                    '$nombreP',
                    '$apellidoP')";
        //Retorna TRUE o FALSE dependiendo del resultado de la operacion.
        return mysql_query($sqlQuery);
    }

    public function obtenerUsuario($nombreProfesor, $apellidoProfesor) {
        $sqlQuery = "SELECT usrname FROM Perfil WHERE nombre = '$nombreProfesor' AND apellido = '$apellidoProfesor'";
        $queryResult = mysql_query($sqlQuery);

        if (!($userProfesor = @mysql_fetch_assoc($queryResult))) {
            return FALSE;
        }
        $usuario = $userProfesor["usrname"];
        return $usuario;
    }

    // VER Script para verificar nombre de las columnas
    public function actualizarMateriasProfesorSinPerfil($user, $codigo, $mesInicial, $mesFinal, $anio, $nombreProfesor, $apellidoProfesor, $calificacion) {
        DataBase::getInstance(); //Conexion a BD establecida.
// Verificar como hacer con nombre apellido
        $sqlQuery = "UPDATE Curso SET profesor = '$nombreProfesor' '$apellidoProfesor',
                calificacion = '$calificacion', profesorID = NULL WHERE estudiante = '$user' AND 
                materia = '$codigo' AND mesInicial = '$mesInicial' 
                AND mesFinal= '$mesFinal' AND anio= '$anio'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.actualizarMaterias(...): " . mysql_error());
        }
        return TRUE;
    }

    // VER Script para verificar nombre de las columnas
    public function actualizarMateriasProfesorConPerfil($user, $codigo, $mesInicial, $mesFinal, $anio, $userProfesor, $calificacion) {
        $sqlQuery = "UPDATE Curso SET profesorID = '$userProfesor', 
                    calificacion ='$calificacion', profesor = NULL 
                    WHERE estudiante = '$user' AND 
                    materia = '$codigo' AND mesInicial= '$mesInicial' AND 
                    mesFinal= '$mesFinal' AND anio= '$anio'";


        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.actualizarMaterias(...): " . mysql_error());
        }
        return TRUE;
    }

    public function eliminarMateria($user, $codigo, $mesInicial, $mesFinal, $anio) {
        DataBase::getInstance(); //Conexion a BD establecida.

        $sqlquery = "DELETE FROM curso WHERE estudiante = '$user' AND 
                materia = '$codigo' AND mesInicial = '$mesInicial' 
                AND mesFinal= '$mesFinal' AND anio= '$anio'";
        $queryResult = mysql_query($sqlQuery);
        if (!$sqlQuery) {
            return FALSE;
        }

        return TRUE;
    }

}

?>
